%newobject CreateCaptureOutputA;
%newobject CreateCaptureOutputW;

%delobject RemoveBreakpoint;


// skip WindbgExt
%ignore Input;
%ignore Get_OutMask;
%ignore Out;
%ignore Warn;
%ignore Err;
%ignore Verb;


%ignore DebugConnect;
%ignore DebugConnectWide;
%ignore DebugCreate;
%ignore DebugCreateEx;


// skip previous versions of interfaces
%ignore IDebugAdvanced;
%ignore IDebugAdvanced2;
%ignore IDebugClient;
%ignore IDebugClient2;
%ignore IDebugClient3;
%ignore IDebugClient4;
%ignore IDebugClient5;
%ignore IDebugClient6;
%ignore IDebugControl;
%ignore IDebugControl2;
%ignore IDebugControl3;
%ignore IDebugControl4;
%ignore IDebugControl5;
%ignore IDebugControl6;
%ignore IDebugDataSpaces;
%ignore IDebugDataSpaces2;
%ignore IDebugDataSpaces3;
%ignore IDebugRegisters;
%ignore IDebugSymbols;
%ignore IDebugSymbols2;
%ignore IDebugSymbols3;
%ignore IDebugSymbols4;
%ignore IDebugSystemObjects;
%ignore IDebugSystemObjects2;
%ignore IDebugSystemObjects3;

%ignore IDebugBreakpoint;
%ignore IDebugBreakpoint2;
%ignore IDebugSymbolGroup;


// skip unused interfaces and structures
%ignore IDebugEventCallbacks;
%ignore IDebugEventCallbacksWide;
%ignore DEBUG_EVENT_CONTEXT;
%ignore IDebugEventContextCallbacks;
%ignore IDebugInputCallbacks;
%ignore IDebugOutputCallbacks;
%ignore IDebugOutputCallbacksWide;
%ignore IDebugOutputCallbacks2;


// skip IDebugClient
%ignore AttachKernel;
%ignore GetKernelConnectionOptions;
%ignore SetKernelConnectionOptions;
%ignore StartProcessServer;
%ignore ConnectProcessServer;
%ignore DisconnectProcessServer;
%ignore ConnectSession;
%ignore StartServer;
%ignore OutputServers;
%ignore DispatchCallbacks;
%ignore ExitDispatch;
%ignore CreateClient;
%ignore GetInputCallbacks;
%ignore SetInputCallbacks;
%ignore GetOutputCallbacks;
%ignore SetOutputCallbacks;
%ignore GetOtherOutputMask;
%ignore SetOtherOutputMask;
%ignore GetEventCallbacks;
%ignore SetEventCallbacks;
%ignore FlushCallbacks;
%ignore EndProcessServer;
%ignore WaitForProcessServerEnd;
%ignore AttachKernelWide;
%ignore GetKernelConnectionOptionsWide;
%ignore SetKernelConnectionOptionsWide;
%ignore StartProcessServerWide;
%ignore ConnectProcessServerWide;
%ignore StartServerWide;
%ignore OutputServersWide;
%ignore GetOutputCallbacksWide;
%ignore SetOutputCallbacksWide;
%ignore GetEventCallbacksWide;
%ignore SetEventCallbacksWide;
%ignore GetNumberInputCallbacks;
%ignore GetNumberOutputCallbacks;
%ignore GetNumberEventCallbacks;
%ignore SetEventContextCallbacks;
// skip IDebugControl
%ignore Input;
%ignore ReturnInput;
%ignore Output;
%ignore OutputVaList;
%ignore ControlledOutput;
%ignore ControlledOutputVaList;
%ignore OutputPrompt;
%ignore OutputPromptVaList;
%ignore GetPromptText;
%ignore GetNotifyEventHandle;
%ignore SetNotifyEventHandle;
%ignore GetExtensionFunction;
%ignore GetWindbgExtensionApis32;
%ignore GetWindbgExtensionApis64;
%ignore InputWide;
%ignore ReturnInputWide;
%ignore OutputWide;
%ignore OutputVaListWide;
%ignore ControlledOutputWide;
%ignore ControlledOutputVaListWide;
%ignore OutputPromptWide;
%ignore OutputPromptVaListWide;
%ignore GetPromptTextWide;
%ignore GetBreakpointByIndex2;
%ignore GetBreakpointById2;
%ignore AddBreakpoint2;
%ignore RemoveBreakpoint2;
%ignore GetExtensionFunctionWide;
// IDebugBreakpoint
%ignore GetAdder;
// IDebugDataSpaces
// IDebugRegisters
// IDebugSymbols
// IDebugSymbolGroup
// IDebugSystemObjects

// skip because of wrappers in WindbgIfaceExtension.h
// IDebugAdvanced
%ignore GetSourceFileInformation;
%ignore FindSourceFileAndToken;
%ignore GetSymbolInformation;
%ignore GetSystemObjectInformation;
%ignore GetSourceFileInformationWide;
%ignore FindSourceFileAndTokenWide;
%ignore GetSymbolInformationWide;
// IDebugClient
%ignore GetRunningProcessSystemIds;
%ignore GetRunningProcessDescription;
%ignore GetOutputLinePrefix;
%ignore GetIdentity;
%ignore GetRunningProcessDescriptionWide;
%ignore GetDumpFile;
%ignore GetDumpFileWide;
%ignore GetOutputLinePrefixWide;
%ignore GetIdentityWide;
%ignore GetQuitLockString;
%ignore GetQuitLockStringWide;
%ignore SetClientContext;
// IDebugControl
%ignore GetLogFile;
%ignore Disassemble;
%ignore GetSystemVersion;
%ignore GetProcessorTypeNames;
%ignore GetTextMacro;
%ignore GetBreakpointParameters;
%ignore GetEventFilterText;
%ignore GetEventFilterCommand;
%ignore GetSpecificFilterParameters;
%ignore SetSpecificFilterParameters;
%ignore GetSpecificFilterArgument;
%ignore GetExceptionFilterParameters;
%ignore SetExceptionFilterParameters;
%ignore GetExceptionFilterSecondCommand;
%ignore GetLastEventInformation;
%ignore GetTextReplacement;
%ignore GetExpressionSyntaxNames;
%ignore GetEventIndexDescription;
%ignore GetLogFileWide;
%ignore DisassembleWide;
%ignore GetProcessorTypeNamesWide;
%ignore GetTextMacroWide;
%ignore GetEventFilterTextWide;
%ignore GetEventFilterCommandWide;
%ignore GetSpecificFilterArgumentWide;
%ignore GetExceptionFilterSecondCommandWide;
%ignore GetLastEventInformationWide;
%ignore GetTextReplacementWide;
%ignore GetExpressionSyntaxNamesWide;
%ignore GetEventIndexDescriptionWide;
%ignore GetLogFile2;
%ignore GetLogFile2Wide;
%ignore GetSystemVersionString;
%ignore GetSystemVersionStringWide;
%ignore GetContextStackTrace;
%ignore OutputContextStackTrace;
%ignore GetStoredEventInformation;
%ignore GetManagedStatus;
%ignore GetManagedStatusWide;
%ignore GetStackTraceEx;
%ignore OutputStackTraceEx;
%ignore GetContextStackTraceEx;
%ignore OutputContextStackTraceEx;
// IDebugBreakpoint
%ignore GetCommand;
%ignore GetOffsetExpression;
%ignore GetCommandWide;
%ignore GetOffsetExpressionWide;
// IDebugDataSpaces
%ignore ReadVirtual;
%ignore WriteVirtual;
%ignore SearchVirtual;
%ignore ReadVirtualUncached;
%ignore WriteVirtualUncached;
%ignore ReadPointersVirtual;
%ignore WritePointersVirtual;
%ignore ReadPhysical;
%ignore WritePhysical;
%ignore ReadControl;
%ignore WriteControl;
%ignore ReadIo;
%ignore WriteIo;
%ignore ReadBusData;
%ignore WriteBusData;
%ignore ReadDebuggerData;
%ignore ReadProcessorSystemData;
%ignore GetVirtualTranslationPhysicalOffsets;
%ignore ReadHandleData;
%ignore FillVirtual;
%ignore FillPhysical;
%ignore ReadTagged;
%ignore GetOffsetInformation;
%ignore SearchVirtual2;
%ignore ReadMultiByteStringVirtual;
%ignore ReadMultiByteStringVirtualWide;
%ignore ReadUnicodeStringVirtual;
%ignore ReadUnicodeStringVirtualWide;
%ignore ReadPhysical2;
%ignore WritePhysical2;
// IDebugRegisters
%ignore GetDescription;
%ignore GetValues;
%ignore SetValues;
%ignore GetDescriptionWide;
%ignore GetPseudoDescription;
%ignore GetPseudoDescriptionWide;
%ignore GetPseudoValues;
%ignore SetPseudoValues;
%ignore GetValues2;
%ignore SetValues2;
// IDebugSymbols
%ignore GetNameByOffset;
%ignore GetNearNameByOffset;
%ignore GetLineByOffset;
%ignore GetModuleNames;
%ignore GetModuleParameters;
%ignore GetTypeName;
%ignore ReadTypedDataVirtual;
%ignore WriteTypedDataVirtual;
%ignore ReadTypedDataPhysical;
%ignore WriteTypedDataPhysical;
%ignore GetScope;
%ignore SetScope;
%ignore GetNextSymbolMatch;
%ignore GetSymbolPath;
%ignore GetImagePath;
%ignore GetSourcePath;
%ignore GetSourcePathElement;
%ignore FindSourceFile;
%ignore GetSourceFileLineOffsets;
%ignore GetModuleVersionInformation;
%ignore GetModuleNameString;
%ignore GetConstantName;
%ignore GetFieldName;
%ignore GetNameByOffsetWide;
%ignore GetNearNameByOffsetWide;
%ignore GetLineByOffsetWide;
%ignore GetTypeNameWide;
%ignore GetNextSymbolMatchWide;
%ignore GetSymbolPathWide;
%ignore GetImagePathWide;
%ignore GetSourcePathWide;
%ignore GetSourcePathElementWide;
%ignore FindSourceFileWide;
%ignore GetSourceFileLineOffsetsWide;
%ignore GetModuleVersionInformationWide;
%ignore GetModuleNameStringWide;
%ignore GetConstantNameWide;
%ignore GetFieldNameWide;
%ignore GetFunctionEntryByOffset;
%ignore GetSymbolEntriesByOffset;
%ignore GetSymbolEntriesByName;
%ignore GetSymbolEntriesByNameWide;
%ignore GetSymbolEntryString;
%ignore GetSymbolEntryStringWide;
%ignore GetSymbolEntryOffsetRegions;
%ignore GetSourceEntriesByOffset;
%ignore GetSourceEntriesByLine;
%ignore GetSourceEntriesByLineWide;
%ignore GetSourceEntryString;
%ignore GetSourceEntryStringWide;
%ignore GetSourceEntryOffsetRegions;
%ignore GetScopeEx;
%ignore SetScopeEx;
%ignore GetNameByInlineContext;
%ignore GetNameByInlineContextWide;
%ignore GetLineByInlineContext;
%ignore GetLineByInlineContextWide;
// IDebugSymbolGroup
%ignore GetSymbolName;
%ignore GetSymbolParameters;
%ignore GetSymbolNameWide;
%ignore GetSymbolTypeName;
%ignore GetSymbolTypeNameWide;
%ignore GetSymbolValueText;
%ignore GetSymbolValueTextWide;
// IDebugSystemObjects
%ignore GetThreadIdsByIndex;
%ignore GetProcessIdsByIndex;
%ignore GetCurrentProcessExecutableName;
%ignore GetSystemIdsByIndex;
%ignore GetCurrentSystemServerName;
%ignore GetCurrentProcessExecutableNameWide;
%ignore GetCurrentSystemServerNameWide;


// temporary disabled
// IDebugControl
%ignore CoerceValues;


// control lifetime
%feature("ref") IDebugBreakpoint3 "";
%feature("unref") IDebugBreakpoint3 "$this->Release();";
%feature("ref") IDebugSymbolGroup2 "";
%feature("unref") IDebugSymbolGroup2 "$this->Release();";
%feature("ref") CaptureOutputA "";
%feature("unref") CaptureOutputA "$this->Release();";
%feature("ref") CaptureOutputW "";
%feature("unref") CaptureOutputW "$this->Release();";


%{
	// Fn must be HRESULT Fn(DataType*, ULONG, ULONG*)
	template<typename DataType, typename LambdaType>
	HRESULT CallWithBufferExtension(ByteArray* buffer, LambdaType fn)
	{
		DataType* dataBuf = NULL;
		ULONG sizeBuf = 0;
		if (buffer && (buffer->Size() > 0))
		{
			dataBuf = reinterpret_cast<DataType*>(buffer->GetBuffer());
			sizeBuf = buffer->Size() / sizeof(DataType);
		}

		ULONG requiredCount;
		HRESULT res = fn(dataBuf, sizeBuf, &requiredCount);
		if ((res == S_OK) && (sizeBuf < requiredCount))
		{
			buffer->Resize(requiredCount * sizeof(DataType));
			res = fn(reinterpret_cast<DataType*>(buffer->GetBuffer()), requiredCount, &requiredCount);
		}
		return res;
	}

	// Fn must be HRESULT Fn(DataType1*, ULONG, ULONG*, DataType2*, ULONG, ULONG*)
	template<typename DataType1, typename DataType2, typename LambdaType>
	HRESULT CallWith2BufferExtension(ByteArray* buffer1, ByteArray* buffer2, LambdaType fn)
	{
		DataType1* dataBuf1 = NULL;
		ULONG sizeBuf1 = 0;
		if (buffer1 && (buffer1->Size() > 0))
		{
			dataBuf1 = reinterpret_cast<DataType1*>(buffer1->GetBuffer());
			sizeBuf1 = buffer1->Size() / sizeof(DataType1);
		}

		DataType2* dataBuf2 = NULL;
		ULONG sizeBuf2 = 0;
		if (buffer2 && (buffer2->Size() > 0))
		{
			dataBuf2 = reinterpret_cast<DataType2*>(buffer2->GetBuffer());
			sizeBuf2 = buffer2->Size() / sizeof(DataType2);
		}

		ULONG requiredCount1, requiredCount2;
		HRESULT res = fn(dataBuf1, sizeBuf1, &requiredCount1, dataBuf2, sizeBuf2, &requiredCount2);
		if ((res == S_OK) && ((sizeBuf1 < requiredCount1) || (sizeBuf2 < requiredCount2)))
		{
			buffer1->Resize(requiredCount1 * sizeof(DataType1));
			buffer2->Resize(requiredCount2 * sizeof(DataType2));
			res = fn(reinterpret_cast<DataType1*>(buffer1->GetBuffer()), requiredCount1, &requiredCount1,
					 reinterpret_cast<DataType2*>(buffer2->GetBuffer()), requiredCount2, &requiredCount2);
		}
		return res;
	}

	// Fn must be HRESULT Fn(DataType1*, ULONG, ULONG*, DataType2*, ULONG, ULONG*, DataType3*, ULONG, ULONG*)
	template<typename DataType1, typename DataType2, typename DataType3, typename LambdaType>
	HRESULT CallWith3BufferExtension(ByteArray* buffer1, ByteArray* buffer2, ByteArray* buffer3, LambdaType fn)
	{
		DataType1* dataBuf1 = NULL;
		ULONG sizeBuf1 = 0;
		if (buffer1 && (buffer1->Size() > 0))
		{
			dataBuf1 = reinterpret_cast<DataType1*>(buffer1->GetBuffer());
			sizeBuf1 = buffer1->Size() / sizeof(DataType1);
		}

		DataType2* dataBuf2 = NULL;
		ULONG sizeBuf2 = 0;
		if (buffer2 && (buffer2->Size() > 0))
		{
			dataBuf2 = reinterpret_cast<DataType2*>(buffer2->GetBuffer());
			sizeBuf2 = buffer2->Size() / sizeof(DataType2);
		}

		DataType3* dataBuf3 = NULL;
		ULONG sizeBuf3 = 0;
		if (buffer3 && (buffer3->Size() > 0))
		{
			dataBuf3 = reinterpret_cast<DataType3*>(buffer3->GetBuffer());
			sizeBuf3 = buffer3->Size() / sizeof(DataType3);
		}

		ULONG requiredCount1, requiredCount2, requiredCount3;
		HRESULT res = fn(dataBuf1, sizeBuf1, &requiredCount1, dataBuf2, sizeBuf2, &requiredCount2, dataBuf3, sizeBuf3, &requiredCount3);
		if ((res == S_OK) && ((sizeBuf1 < requiredCount1) || (sizeBuf2 < requiredCount2)|| (sizeBuf3 < requiredCount3)))
		{
			buffer1->Resize(requiredCount1 * sizeof(DataType1));
			buffer2->Resize(requiredCount2 * sizeof(DataType2));
			buffer3->Resize(requiredCount3 * sizeof(DataType3));
			res = fn(reinterpret_cast<DataType1*>(buffer1->GetBuffer()), requiredCount1, &requiredCount1,
					 reinterpret_cast<DataType2*>(buffer2->GetBuffer()), requiredCount2, &requiredCount2,
					 reinterpret_cast<DataType3*>(buffer3->GetBuffer()), requiredCount3, &requiredCount3);
		}
		return res;
	}
%}

// avoid winapifamiy.h because swig cannot interpret it correctly
#define _INC_WINAPIFAMILY
#define WINAPI_FAMILY_PARTITION(x) 1

%include "../windbg/inc/dbgeng.h"

// Replace original methods with wrappers with the same name
// IDebugAdvanced
%rename("GetSourceFileInformation") GetSourceFileInformation_;
%rename("FindSourceFileAndToken") FindSourceFileAndToken_;
%rename("GetSymbolInformation") GetSymbolInformation_;
%rename("GetSystemObjectInformation") GetSystemObjectInformation_;
%rename("GetSourceFileInformationWide") GetSourceFileInformationWide_;
%rename("FindSourceFileAndTokenWide") FindSourceFileAndTokenWide_;
%rename("GetSymbolInformationWide") GetSymbolInformationWide_;
// IDebugClient7
%rename("GetRunningProcessSystemIds") GetRunningProcessSystemIds_;
%rename("GetRunningProcessDescription") GetRunningProcessDescription_;
%rename("GetOutputLinePrefix") GetOutputLinePrefix_;
%rename("GetIdentity") GetIdentity_;
%rename("GetRunningProcessDescriptionWide") GetRunningProcessDescriptionWide_;
%rename("GetDumpFile") GetDumpFile_;
%rename("GetDumpFileWide") GetDumpFileWide_;
%rename("GetOutputLinePrefixWide") GetOutputLinePrefixWide_;
%rename("GetIdentityWide") GetIdentityWide_;
%rename("GetQuitLockString") GetQuitLockString_;
%rename("GetQuitLockStringWide") GetQuitLockStringWide_;
%rename("SetClientContext") SetClientContext_;
// IDebugControl7
%rename("GetLogFile") GetLogFile_;
%rename("Disassemble") Disassemble_;
%rename("GetSystemVersion") GetSystemVersion_;
%rename("GetProcessorTypeNames") GetProcessorTypeNames_;
%rename("GetTextMacro") GetTextMacro_;
%rename("GetBreakpointParameters") GetBreakpointParameters_;
%rename("GetEventFilterText") GetEventFilterText_;
%rename("GetEventFilterCommand") GetEventFilterCommand_;
%rename("GetSpecificFilterParameters") GetSpecificFilterParameters_;
%rename("SetSpecificFilterParameters") SetSpecificFilterParameters_;
%rename("GetSpecificFilterArgument") GetSpecificFilterArgument_;
%rename("GetExceptionFilterParameters") GetExceptionFilterParameters_;
%rename("SetExceptionFilterParameters") SetExceptionFilterParameters_;
%rename("GetExceptionFilterSecondCommand") GetExceptionFilterSecondCommand_;
%rename("GetLastEventInformation") GetLastEventInformation_;
%rename("GetTextReplacement") GetTextReplacement_;
%rename("GetExpressionSyntaxNames") GetExpressionSyntaxNames_;
%rename("GetEventIndexDescription") GetEventIndexDescription_;
%rename("GetLogFileWide") GetLogFileWide_;
%rename("DisassembleWide") DisassembleWide_;
%rename("GetProcessorTypeNamesWide") GetProcessorTypeNamesWide_;
%rename("GetTextMacroWide") GetTextMacroWide_;
%rename("GetEventFilterTextWide") GetEventFilterTextWide_;
%rename("GetEventFilterCommandWide") GetEventFilterCommandWide_;
%rename("GetSpecificFilterArgumentWide") GetSpecificFilterArgumentWide_;
%rename("GetExceptionFilterSecondCommandWide") GetExceptionFilterSecondCommandWide_;
%rename("GetLastEventInformationWide") GetLastEventInformationWide_;
%rename("GetTextReplacementWide") GetTextReplacementWide_;
%rename("GetExpressionSyntaxNamesWide") GetExpressionSyntaxNamesWide_;
%rename("GetEventIndexDescriptionWide") GetEventIndexDescriptionWide_;
%rename("GetLogFile2") GetLogFile2_;
%rename("GetLogFile2Wide") GetLogFile2Wide_;
%rename("GetSystemVersionString") GetSystemVersionString_;
%rename("GetSystemVersionStringWide") GetSystemVersionStringWide_;
%rename("GetContextStackTrace") GetContextStackTrace_;
%rename("OutputContextStackTrace") OutputContextStackTrace_;
%rename("GetStoredEventInformation") GetStoredEventInformation_;
%rename("GetManagedStatus") GetManagedStatus_;
%rename("GetManagedStatusWide") GetManagedStatusWide_;
%rename("GetStackTraceEx") GetStackTraceEx_;
%rename("OutputStackTraceEx") OutputStackTraceEx_;
%rename("GetContextStackTraceEx") GetContextStackTraceEx_;
%rename("OutputContextStackTraceEx") OutputContextStackTraceEx_;
// IDebugBreakpoint3
%rename("GetCommand") GetCommand_;
%rename("GetOffsetExpression") GetOffsetExpression_;
%rename("GetCommandWide") GetCommandWide_;
%rename("GetOffsetExpressionWide") GetOffsetExpressionWide_;
// IDebugDataSpaces4
%rename("ReadVirtual") ReadVirtual_;
%rename("WriteVirtual") WriteVirtual_;
%rename("SearchVirtual") SearchVirtual_;
%rename("ReadVirtualUncached") ReadVirtualUncached_;
%rename("WriteVirtualUncached") WriteVirtualUncached_;
%rename("ReadPointersVirtual") ReadPointersVirtual_;
%rename("WritePointersVirtual") WritePointersVirtual_;
%rename("ReadPhysical") ReadPhysical_;
%rename("WritePhysical") WritePhysical_;
%rename("ReadControl") ReadControl_;
%rename("WriteControl") WriteControl_;
%rename("ReadIo") ReadIo_;
%rename("WriteIo") WriteIo_;
%rename("ReadBusData") ReadBusData_;
%rename("WriteBusData") WriteBusData_;
%rename("ReadDebuggerData") ReadDebuggerData_;
%rename("ReadProcessorSystemData") ReadProcessorSystemData_;
%rename("GetVirtualTranslationPhysicalOffsets") GetVirtualTranslationPhysicalOffsets_;
%rename("ReadHandleData") ReadHandleData_;
%rename("FillVirtual") FillVirtual_;
%rename("FillPhysical") FillPhysical_;
%rename("ReadTagged") ReadTagged_;
%rename("GetOffsetInformation") GetOffsetInformation_;
%rename("SearchVirtual2") SearchVirtual2_;
%rename("ReadMultiByteStringVirtual") ReadMultiByteStringVirtual_;
%rename("ReadMultiByteStringVirtualWide") ReadMultiByteStringVirtualWide_;
%rename("ReadUnicodeStringVirtual") ReadUnicodeStringVirtual_;
%rename("ReadUnicodeStringVirtualWide") ReadUnicodeStringVirtualWide_;
%rename("ReadPhysical2") ReadPhysical2_;
%rename("WritePhysical2") WritePhysical2_;
// IDebugRegisters2
%rename("GetDescription") GetDescription_;
%rename("GetValues") GetValues_;
%rename("SetValues") SetValues_;
%rename("GetDescriptionWide") GetDescriptionWide_;
%rename("GetPseudoDescription") GetPseudoDescription_;
%rename("GetPseudoDescriptionWide") GetPseudoDescriptionWide_;
%rename("GetPseudoValues") GetPseudoValues_;
%rename("SetPseudoValues") SetPseudoValues_;
%rename("GetValues2") GetValues2_;
%rename("SetValues2") SetValues2_;
// IDebugSymbols5
%rename("GetNameByOffset") GetNameByOffset_;
%rename("GetNearNameByOffset") GetNearNameByOffset_;
%rename("GetLineByOffset") GetLineByOffset_;
%rename("GetModuleNames") GetModuleNames_;
%rename("GetModuleParameters") GetModuleParameters_;
%rename("GetTypeName") GetTypeName_;
%rename("ReadTypedDataVirtual") ReadTypedDataVirtual_;
%rename("WriteTypedDataVirtual") WriteTypedDataVirtual_;
%rename("ReadTypedDataPhysical") ReadTypedDataPhysical_;
%rename("WriteTypedDataPhysical") WriteTypedDataPhysical_;
%rename("GetScope") GetScope_;
%rename("SetScope") SetScope_;
%rename("GetNextSymbolMatch") GetNextSymbolMatch_;
%rename("GetSymbolPath") GetSymbolPath_;
%rename("GetImagePath") GetImagePath_;
%rename("GetSourcePath") GetSourcePath_;
%rename("GetSourcePathElement") GetSourcePathElement_;
%rename("FindSourceFile") FindSourceFile_;
%rename("GetSourceFileLineOffsets") GetSourceFileLineOffsets_;
%rename("GetModuleVersionInformation") GetModuleVersionInformation_;
%rename("GetModuleNameString") GetModuleNameString_;
%rename("GetConstantName") GetConstantName_;
%rename("GetFieldName") GetFieldName_;
%rename("GetNameByOffsetWide") GetNameByOffsetWide_;
%rename("GetNearNameByOffsetWide") GetNearNameByOffsetWide_;
%rename("GetLineByOffsetWide") GetLineByOffsetWide_;
%rename("GetTypeNameWide") GetTypeNameWide_;
%rename("GetNextSymbolMatchWide") GetNextSymbolMatchWide_;
%rename("GetSymbolPathWide") GetSymbolPathWide_;
%rename("GetImagePathWide") GetImagePathWide_;
%rename("GetSourcePathWide") GetSourcePathWide_;
%rename("GetSourcePathElementWide") GetSourcePathElementWide_;
%rename("FindSourceFileWide") FindSourceFileWide_;
%rename("GetSourceFileLineOffsetsWide") GetSourceFileLineOffsetsWide_;
%rename("GetModuleVersionInformationWide") GetModuleVersionInformationWide_;
%rename("GetModuleNameStringWide") GetModuleNameStringWide_;
%rename("GetConstantNameWide") GetConstantNameWide_;
%rename("GetFieldNameWide") GetFieldNameWide_;
%rename("GetFunctionEntryByOffset") GetFunctionEntryByOffset_;
%rename("GetSymbolEntriesByOffset") GetSymbolEntriesByOffset_;
%rename("GetSymbolEntriesByName") GetSymbolEntriesByName_;
%rename("GetSymbolEntriesByNameWide") GetSymbolEntriesByNameWide_;
%rename("GetSymbolEntryString") GetSymbolEntryString_;
%rename("GetSymbolEntryStringWide") GetSymbolEntryStringWide_;
%rename("GetSymbolEntryOffsetRegions") GetSymbolEntryOffsetRegions_;
%rename("GetSourceEntriesByOffset") GetSourceEntriesByOffset_;
%rename("GetSourceEntriesByLine") GetSourceEntriesByLine_;
%rename("GetSourceEntriesByLineWide") GetSourceEntriesByLineWide_;
%rename("GetSourceEntryString") GetSourceEntryString_;
%rename("GetSourceEntryStringWide") GetSourceEntryStringWide_;
%rename("GetSourceEntryOffsetRegions") GetSourceEntryOffsetRegions_;
%rename("GetScopeEx") GetScopeEx_;
%rename("SetScopeEx") SetScopeEx_;
%rename("GetNameByInlineContext") GetNameByInlineContext_;
%rename("GetNameByInlineContextWide") GetNameByInlineContextWide_;
%rename("GetLineByInlineContext") GetLineByInlineContext_;
%rename("GetLineByInlineContextWide") GetLineByInlineContextWide_;
// IDebugSymbolGroup2
%rename("GetSymbolName") GetSymbolName_;
%rename("GetSymbolParameters") GetSymbolParameters_;
%rename("GetSymbolNameWide") GetSymbolNameWide_;
%rename("GetSymbolTypeName") GetSymbolTypeName_;
%rename("GetSymbolTypeNameWide") GetSymbolTypeNameWide_;
%rename("GetSymbolValueText") GetSymbolValueText_;
%rename("GetSymbolValueTextWide") GetSymbolValueTextWide_;
// IDebugSystemObjects4
%rename("GetThreadIdsByIndex") GetThreadIdsByIndex_;
%rename("GetProcessIdsByIndex") GetProcessIdsByIndex_;
%rename("GetCurrentProcessExecutableName") GetCurrentProcessExecutableName_;
%rename("GetSystemIdsByIndex") GetSystemIdsByIndex_;
%rename("GetCurrentSystemServerName") GetCurrentSystemServerName_;
%rename("GetCurrentProcessExecutableNameWide") GetCurrentProcessExecutableNameWide_;
%rename("GetCurrentSystemServerNameWide") GetCurrentSystemServerNameWide_;

// extension functions
%include "../common/WindbgIfaceExtension.h"
